<template>
  <transition name="fadeIn">
    <div v-show='false'>
      <el-table :id="exportExcelInfo.excelId" :data="tableData" highlight-current-row style="width: 100%">
        <template v-for="(item,index) in exportExcelArry">
          <el-table-column v-if="!item.formatterFlag" :prop="item.prop" :label="item.label">
          </el-table-column>
          <el-table-column v-else :prop="item.prop" :label="item.label">
            <template slot-scope="scope">
              <span>{{ formatter(scope.row[item.prop],item,scope.row,item.prop) }}</span>
            </template>
          </el-table-column>
        </template>
      </el-table>
    </div>
  </transition>
</template>

<script>
import FileSaver from 'file-saver'
import XLSX from 'xlsx'

export default {
  name: 'export-excel-common',

  props: {
    exportExcelInfo: {
      type: Object,
      default: {}
    },
    exportExcelArry: {
      type: Array,
      default: []
    },
    tableData: {
      type: Array,
      default: []
    },
  },

  methods: {

    // const exportFile = () => {
    //   console.log('exportFile');
    //   // 生成workbook
    //   const workbook = XLSX.utils.book_new();
    //   const headerData = [
    //     { title: '标题', a: '经纬度' },
    //     { title: '标题1', a: '经度纬度 超链接' },
    //   ];
    //   // 生成worksheet
    //   const worksheet = XLSX.utils.json_to_sheet(headerData, { skipHeader: true });
    //   // 组装
    //   XLSX.utils.book_append_sheet(workbook, worksheet, 'sheet1');
    //   worksheet['B2'].l = { Target: 'https://docs.sheetjs.com/#hyperlinks' };
    //   // 导出，就会直接下载
    //   XLSX.writeFile(workbook, `text_a.xlsx`);
    //   console.log('exportFile end');
    // };
    //excel导出
    exportExcel() {
      var xlsxParam = {
        raw: true
      } // 导出的内容只做解析，不进行格式转换
      var wb = XLSX.utils.table_to_book(document.querySelector('#' + this.exportExcelInfo.excelId), xlsxParam)

      var wbout = XLSX.write(wb, {
        bookType: 'xlsx',
        bookSST: true,
        type: 'array'
      })
      console.log(wb.Sheets['Sheet1'])

      console.log(typeof(wb.Sheets['Sheet1']))

      console.log(Object.keys(wb.Sheets['Sheet1']))
      return false
      // wb.Sheets['Sheet1'].C = { Target: 'https://docs.sheetjs.com/#hyperlinks' };
      try {
        FileSaver.saveAs(new Blob([wbout], {
          type: 'application/octet-stream'
        }), this.exportExcelInfo.excelName)
      } catch (e) {
        if (typeof console !== 'undefined') console.log(e, wbout)
      }
      return wbout
    },

    //表格formatter数据格式化
    formatter(value, item, row, prop) {
      //针对table中item多层对象层级的情况
      if (prop.indexOf('.') > 0) {
        let temp = prop.split('.')
        //item中嵌套两层
        if (temp.length == 2) {
          let temp = prop.split('.')
          if (item.formatterType == 'common-type') { //通用类型转换
            let arry = item.formatterInfo
            for (let i in arry) {
              if (arry[i].value == row[temp[0]][temp[1]]) {
                return arry[i].label
              }
            }
          } else if (item.formatterType == 'time-type') { //时间标准格式化
            if (!global.isNull(row[temp[0]][temp[1]])) {
              return row[temp[0]][temp[1]].substring(0, row[temp[0]][temp[1]].length - 2)
            }
          } else if (item.formatterType == 'amount-type') { //金额转换
            return (row[temp[0]][temp[1]] / 100).toFixed(2)
          }
        }
      } else { //item中无嵌套对象
        let temp = prop.split('.')
        if (item.formatterType == 'common-type') { //通用类型转换
          let arry = item.formatterInfo
          for (let i in arry) {
            if (arry[i].value == value) {
              return arry[i].label
            }
          }
        } else if (item.formatterType == 'time-type') { //时间标准格式化
          if (!global.isNull(row[temp[0]][temp[1]])) {
            return value.substring(0, value.length - 2)
          }
        } else if (item.formatterType == 'amount-type') { //金额转换
          return (value / 100).toFixed(2)
        }
      }
    }
  }
}

// 1、通常情况下列表中的字段不需要formatter，把exportExcelArry 对象中formatterFlag设成false;
// 2、需要formatter的数据主要有code对应label的转换（type='common-type'），金额的单位转换等，需要根据自己项目的需求封装成通用的组件;
// 3、针对后端返回的数据data多层的情况，需要对exportExcelArry中的prop字段进行分割来获取row中对应的值，一般情况下两层足够了
</script>
